package com.tuars.instalacionesalberti.vistas.articulos;

import java.awt.Color;

import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableModel;

import com.tuars.instalacionesalberti.controllers.articles.BuscarArticulo;
import com.tuars.instalacionesalberti.controllers.articles.EliminarArticulo;
import com.tuars.instalacionesalberti.controllers.articles.ObtenerArticulos;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JMenuItem;

@SuppressWarnings("serial")
public class VistaMostrarArticulos extends JPanel{
	
	private JTextField textField;
	private JPopupMenu popup;
	
	private ObtenerArticulos articulos ;
	
	private DefaultTableModel dtmEjemplo;
	private JTable tblEjemplo;
	private JScrollPane scpEjemplo;
	private JMenuItem mntmCopiar;
	private JMenuItem mntmCortar;
	private JMenuItem mntmPegar;
	private JMenuItem mntmModificar;
		
	public VistaMostrarArticulos() {
		setSize(964, 519);
		setBackground(new Color(70, 130, 180));
		setLayout(null);
		
		/**
		 * Tabla que mostrar� la base de datos
		 */
		articulos = new ObtenerArticulos();
		tblEjemplo = new JTable();
        scpEjemplo= new JScrollPane();
 
        //Llenamos el modelo
        dtmEjemplo = new DefaultTableModel(articulos.getFilas(), articulos.getColumnas());
 
        tblEjemplo.setModel(dtmEjemplo);
        scpEjemplo.add(tblEjemplo);
        this.add(scpEjemplo);
        scpEjemplo.setBounds(10, 62, 944, 446);
 
        scpEjemplo.setViewportView(tblEjemplo);
        
        //Ajuste tabla
        tblEjemplo.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
        
        /**
         * Boton mostrar todos
         * este sirve para mostrar todos los registros de nuevo
         */
        final JButton btnMostrarTodos = new JButton("Mostrar todos");
		btnMostrarTodos.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				articulos = new ObtenerArticulos();
				tblEjemplo = new JTable();
		        scpEjemplo= new JScrollPane();
		 
		        //Llenamos el modelo
		        dtmEjemplo = new DefaultTableModel(articulos.getFilas(), articulos.getColumnas());
		 
		        tblEjemplo.setModel(dtmEjemplo);
		        scpEjemplo.add(tblEjemplo);
		        add(scpEjemplo);
		        scpEjemplo.setBounds(10, 62, 944, 446);
		 
		        scpEjemplo.setViewportView(tblEjemplo);
		        btnMostrarTodos.setEnabled(false);
			}
		});
		btnMostrarTodos.setBounds(10, 11, 134, 23);
		btnMostrarTodos.setEnabled(false);
		add(btnMostrarTodos);
		
        /**
		 * Boton buscar
		 * JTextField para introducir la clausula a buscar
		 * Esta parte nos permitir� hacer busquedas en la tabla mostrada
		 */
        textField = new JTextField();
		textField.setBounds(752, 12, 113, 20);
		add(textField);
		textField.setColumns(10);
		
		JButton btnBuscar = new JButton("Buscar");
		btnBuscar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String sql = "SELECT * FROM articulo WHERE Descripcion LIKE '%"+textField.getText()+"%'";
				
				BuscarArticulo buscarArt = new BuscarArticulo();
				dtmEjemplo = new DefaultTableModel(buscarArt.getFilas(sql), buscarArt.getColumnas(sql));
				
				tblEjemplo.setModel(dtmEjemplo);
		        scpEjemplo.add(tblEjemplo);
		        add(scpEjemplo);
		        scpEjemplo.setBounds(10, 62, 944, 446);
		 
		        scpEjemplo.setViewportView(tblEjemplo);
		        btnMostrarTodos.setEnabled(true);
			}
		});
		btnBuscar.setBounds(867, 11, 87, 23);
		add(btnBuscar);
		
		/**
		 * PopUpMenu que nos servira para:
		 * eliminar registros
		 */
		popup = new JPopupMenu();
        addPopup(tblEjemplo, popup);
        
        /**
         * Item de menu para eliminar registros
         */
        //TODO si encaso de que seleccionen dos registros a la vez como eliminarlos, o dar un error que solo se puede eliminar uno
        JMenuItem mntmEliminarArticulo = new JMenuItem("Eliminar");
        mntmEliminarArticulo.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
				/**
				 * Estas quatro primeras lineas eliminan el registro de la tabla
				 */
				int row = tblEjemplo.getSelectedRow();
				
				String registroEliminar = (String) tblEjemplo.getValueAt(row, 0);	
				
				EliminarArticulo eliminarArticulo = new EliminarArticulo();
				eliminarArticulo.eliminarRegistro(registroEliminar);
				
				/**
				 * Estas lineas eliminan vuelven a cargar la tabla
				 */
				tblEjemplo.removeAll();
				articulos = new ObtenerArticulos();
				tblEjemplo = new JTable();
		        scpEjemplo= new JScrollPane();
		 
		        //Llenamos el modelo
		        dtmEjemplo = new DefaultTableModel(articulos.getFilas(), articulos.getColumnas());
		 
		        tblEjemplo.setModel(dtmEjemplo);
		        scpEjemplo.add(tblEjemplo);
		        add(scpEjemplo);
		        scpEjemplo.setBounds(10, 62, 944, 446);
		 
		        scpEjemplo.setViewportView(tblEjemplo);
		        btnMostrarTodos.setEnabled(false);
				
			}
		});
        popup.add(mntmEliminarArticulo);
        
        /**
         * Item popupMenu para modificar un rejistro
         * Proceso: Abrir Nueva ventana y modificar los campos elejidos
         */
        mntmModificar = new JMenuItem("Modificar");
        popup.add(mntmModificar);
        
        popup.addSeparator();
        
        mntmCopiar = new JMenuItem("Copiar");
        mntmCopiar.disable();
        popup.add(mntmCopiar);
        
        mntmCortar = new JMenuItem("Cortar");
        mntmCortar.disable();
        popup.add(mntmCortar);
        
        mntmPegar = new JMenuItem("Pegar");
        mntmPegar.disable();
        popup.add(mntmPegar);
		
		
	}
	
	private static void addPopup(Component component, final JPopupMenu popup) {
		component.addMouseListener(new MouseAdapter() {
			public void mousePressed(MouseEvent e) {
				if (e.isPopupTrigger()) {
					showMenu(e);
				}
			}
			public void mouseReleased(MouseEvent e) {
				if (e.isPopupTrigger()) {
					showMenu(e);
				}
			}
			private void showMenu(MouseEvent e) {
				popup.show(e.getComponent(), e.getX(), e.getY());
			}
		});
	}
}
